<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>      
        // 作用1:解决变量污染问题,让变量被函数保护起来。

        // 示例代码 
        let count = 0
        setInterval(function (){
            console.log(count++);
        },1000)

        //以上代码中的count是一个使用频率很高的变量名。
        // 为了避免和其他位置的代码冲突,可以再使用一个函数把以上的代码包裹起来,起到保护作用。

        function fn(){
            let count = 0

            setInterval(function(){
                console.log(count++);
            },1000)
        }
        fn()
        // 以上代码中,setInterval函数与count构成了闭包

         function fn(){
            let count = 0
            function add(){
                console.log(count++);
            }
            setInterval(add,1000)
        }
        fn()
        // 以上代码中,add+count构成了闭包
        // 总结:一个函数内使用了外部的变量,那这个函数和被使用的外部变量一起被称为闭包结构
        //	在实际开发中,通常会再使用一个函数包裹住闭包结构,以起到对变量保护的作用。
    </script>
</body>
</html>